// **************************************************************
// COPYRIGHT(c)2021, Xidian University
// All rights reserved.
//
// IP LIB INDEX :  
// IP Name      :      
// File name    :  
// Module name  : field_select 
// Full name    :  
// Time         : 2021 
// Author       : Haoxiaofei 
// Email        : 1531804419@qq.com
// Data         : 
// Version      : V 2.0 
// 
// Abstract     :ctr_field根据maetedata中的表项配置信息选择对应级流表的匹配字段输入
// Called by    :  
// 

// *******************
// TIMESCALE
// *******************
// 
`timescale 1ns/1ps
// 
// *******************
// INCLUDE
// *******************
// 
// 
// 
// *******************
// INFORMATION
// *******************
// 
// 
// 
// *******************
// DEFINE(s)
// *******************
// 
// 
// 
// *******************
// DEFINE MODULE PORT
// *******************
// 
module field_mux_128_8(
input  wire                 clk                    ,
input  wire                 rst_n                  ,
input  wire [4   : 0  ]     ctr_field              ,
input  wire                 vector_rdy             ,
input  wire [0   : 127]     pktheader_vector       ,
// output reg                  select_end_o           ,
output reg  [7   : 0  ]     field_buffer                               

);
// *******************
// DEFINE LOCAL PARAMETER
// *******************
// 
// 
// 
// *******************
// INNER SIGNAL DECLARATION
// *******************
// REGS

// WIRES

// *******************
// INSTANTCE MODULE
// *******************
// 
// 
// 
// *******************
// MAIN CORE
// *******************

always @(posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0) begin
        field_buffer       <= 8'b0   ;
        // select_end_o       <= 1'b0   ;
    end
    else if(vector_rdy) begin
                                    // select_end_o <= 1'b1;
            case(ctr_field[4:0])
                          5'b1_0000 : field_buffer <= pktheader_vector[0   : 7  ];
                          5'b1_0001 : field_buffer <= pktheader_vector[8   : 15 ];
                          5'b1_0010 : field_buffer <= pktheader_vector[16  : 23 ];
                          5'b1_0011 : field_buffer <= pktheader_vector[24  : 31 ];
                          5'b1_0100 : field_buffer <= pktheader_vector[32  : 39 ];
                          5'b1_0101 : field_buffer <= pktheader_vector[40  : 47 ];
                          5'b1_0110 : field_buffer <= pktheader_vector[48  : 55 ];
                          5'b1_0111 : field_buffer <= pktheader_vector[56  : 63 ];
                          5'b1_1000 : field_buffer <= pktheader_vector[64  : 71 ];
                          5'b1_1001 : field_buffer <= pktheader_vector[72  : 79 ];
                          5'b1_1010 : field_buffer <= pktheader_vector[80  : 87 ];
                          5'b1_1011 : field_buffer <= pktheader_vector[88  : 95 ];
                          5'b1_1100 : field_buffer <= pktheader_vector[96  : 103];
                          5'b1_1101 : field_buffer <= pktheader_vector[104 : 111];
                          5'b1_1110 : field_buffer <= pktheader_vector[112 : 119];
                          5'b1_1111 : field_buffer <= pktheader_vector[120 : 127];
                          default : field_buffer <= 8'b0   ;
            endcase
    end 
    else begin
                                    field_buffer <= 8'b0   ;
                                    // select_end_o <= 1'b0   ;
    end
end

endmodule